package com.vita.testCore.put;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import com.vita.testCore.CvtExecute1;
import com.vita.testCore.CvtStep;
import com.vita.testCore.CvtExecute;
import com.vita.testCore.func.CvtExecuteIn;

/**
 * input （累加输入操作符）：
 * 所有的 input(I i) 内容都会累加到一个list里面
 */
public class Input<I> implements CvtStep {
    private List<I> inputs;

    public Input(I i) {
        this.inputs = new ArrayList<>();
        this.inputs.add(i);
    }

    public Input(List<I> list) {
        this.inputs = list;
    }

    public Input<I> input(I i){
        Objects.requireNonNull(i, "入参为NULL");
        inputs.add(i);
        return this;
    }

    public Input<I> input(List<I> i){
        Objects.requireNonNull(i, "入参为NULL");
        inputs.addAll(i);
        return this;
    }

    public <O> Output<I,O> output(O o){
        return new Output<I,O>(inputs,o);
    }

    public <O> Output<I,O> output(List<O> outputs){
        return new Output<I,O>(this.inputs,outputs);
    }

//    @Override
    public void plan(CvtExecute execute) {
        Objects.requireNonNull(execute, "请构建执行器TaskExecute");
        if(!(execute instanceof CvtExecuteIn)){
            throw new ClassCastException("Input<I> 单输入必须使用 CvtExecuteFunc1 执行器");
        }
        CvtExecuteIn ce = (CvtExecuteIn) execute;
        I input = this.inputs.get(0);
        ce.input(input);
        ce.run(input);
    }

    @Override
    public void plan(CvtExecute1 execute) {

    }
}
